package impiccato;

import javax.swing.JOptionPane;

public class impiccato {

    public static String FormattaTempo(long tempo) {
        long minuti = tempo / 60;
        long secondi = tempo - 60 * minuti;
        String ritorna = minuti + " minuti e " + secondi + " secondi";
        return ritorna;

    }

    public static long time() {
        long tempo;
        tempo = System.currentTimeMillis() / 1000;
        return tempo;
    }

    public static boolean confronta(String parola, String lettera) {
        int leng = parola.length();
        String confronta = "falso";
        for (int i = 0; i < leng && confronta.equals("falso"); i++) {
            String lett = parola.charAt(i) + "";
            if (lett.equalsIgnoreCase(lettera)) {
                confronta = "vero";
            } else {
                confronta = "falso";
            }
        }
        if (confronta.equals("vero")) {
            return true;
        } else {
            return false;
        }
    }

    public static String impiccato(String parola, String[] lettere, int num) {
        int leng = parola.length();
        String par;
        boolean presenza = false;
        char lett;
        lett = parola.charAt(0);
        par = lett + "";
        for (int i = 1; i < leng - 1; i++) {
            String lettera = parola.charAt(i) + "";
            presenza = false;
            for (int id = 0; id < lettere.length; id++) {
                if (lettera.equalsIgnoreCase(lettere[id]) || presenza) {
                    presenza = true;
                } else {
                    presenza = false;
                }
            }
            if (presenza) {
                if (num == 0) {
                    par = par + lettera;
                } else {
                    par = par + " " + lettera + " ";
                }
            } else {
                if (num == 0) {
                    par = par + "_";
                } else {
                    par = par + " " + "_" + " ";
                }
            }
        }
        lett = parola.charAt(leng - 1);
        par = par + lett;
        return par;
    }

    public static void main(String[] args) {
        int continua = 0;
        while (continua == 0) {
            String giocatoreI;
            String giocatoreII;
            String parolenumero;
            String lettera;
            String disegno;
            String parolautente = "";
            int paroleindovinate = 0;
            int regolamento = 1;
            int id;
            int chiinizia;
            int numeroparole;
            int errori = 0;
            int unoodue;
            String[] parole;
            String[] parolesole = {"informatica", "teletrasporto", "alberi", "elefante", "mela", "matematica", "computer", "ricerca", "impiccato", "laurea"};
            String[] scelta = {"Inizia a giocare", "Leggi il regolamento"};
            String[] scelte = {"Un giocatore", "Due giocatori"};
            while (regolamento == 1) {
                regolamento = JOptionPane.showOptionDialog(null, "Benvenuto nel gioco dell'impiccato!!", "Impiccato", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, scelta, scelta[0]);
                if (regolamento == 1) {
                    JOptionPane.showMessageDialog(null, "Lo scopo di questo gioco è indovinare una parola tra le diverse parole\ninserite da uno dei due giocatori, si hanno massimo\ncinque errori prima di morire impiccati.\nSi può chiedere una lettera alla volta che apparirà solamente nel caso\nche sia presente nella parola.");
                }
            }
            unoodue = JOptionPane.showOptionDialog(null, "Vuoi giocare da solo o con un amico?", "Input", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, scelte, scelte[0]);
            if (unoodue == 0) {
                numeroparole = parolesole.length;
                parole = new String[numeroparole];
                for (int i = 0; i < parole.length; i++) {
                    parole[i] = parolesole[i];
                }
                giocatoreI = JOptionPane.showInputDialog("Inserire nome giocatore:");
                while (giocatoreI.isEmpty() || giocatoreI == null) {
                    giocatoreI = JOptionPane.showInputDialog("Inserire nome giocatore");
                }
                JOptionPane.showMessageDialog(null, "Ok " + giocatoreI + " ora indovina le parole prima che la figura dell'impiccato sia completa.");
            } else {
                giocatoreI = JOptionPane.showInputDialog("Inserire nome primo giocatore:");
                while (giocatoreI.isEmpty() || giocatoreI == null) {
                    giocatoreI = JOptionPane.showInputDialog("Inserire nome primo giocatore:");
                }
                giocatoreII = JOptionPane.showInputDialog("Inserire nome secondo giocatore:");
                while (giocatoreII.isEmpty() || giocatoreII == null) {
                    giocatoreII = JOptionPane.showInputDialog("Inserire nome secondo giocatore:");
                }
                String[] opzioni = {giocatoreI, giocatoreII};
                chiinizia = JOptionPane.showOptionDialog(null, "Chi deve iniziare a giocare?", "Primo a giocare", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, opzioni, opzioni[0]);
                if (chiinizia == 0) {
                    parolenumero = JOptionPane.showInputDialog("Ciao " + giocatoreI + " quante parole vuoi inserire?");
                    numeroparole = Integer.parseInt(parolenumero);
                    while (parolenumero.isEmpty() || numeroparole < 0 || parolenumero == null) {
                        parolenumero = JOptionPane.showInputDialog("Ciao " + giocatoreII + " quante parole vuoi inserire?");
                        numeroparole = Integer.parseInt(parolenumero);
                    }
                    JOptionPane.showMessageDialog(null, giocatoreI + " assicurati che " + giocatoreII + " non ti guardi mentre inserisci le parole");
                } else {
                    parolenumero = JOptionPane.showInputDialog("Ciao " + giocatoreII + " quante parole vuoi inserire?");
                    numeroparole = Integer.parseInt(parolenumero);
                    while (parolenumero.isEmpty() || numeroparole < 0 || parolenumero == null) {
                        parolenumero = JOptionPane.showInputDialog("Ciao " + giocatoreII + " quante parole vuoi inserire?");
                        numeroparole = Integer.parseInt(parolenumero);
                    }
                    JOptionPane.showMessageDialog(null, giocatoreII + " assicurati che " + giocatoreI + " non ti guardi mentre inserisci le parole");
                }
                parole = new String[numeroparole];
                for (int i = 0; i < numeroparole; i++) {
                    int num = i + 1;
                    parole[i] = JOptionPane.showInputDialog("Inserire la " + num + " parola (almeno 3 lettere):");
                    while (parole[i].isEmpty() || parole[i].length() < 3 || parole[i] == null) {
                        parole[i] = JOptionPane.showInputDialog("Inserire la " + num + " parola (almeno 3 lettere)");
                    }
                }
                if (chiinizia == 0) {
                    JOptionPane.showMessageDialog(null, giocatoreII + " ora tocca a te, indovina la parola prima che la figura dell'impiccato sia completa");
                } else {
                    JOptionPane.showMessageDialog(null, giocatoreI + " ora tocca a te, indovina la parola prima che la figura dell'impiccato sia completa");
                }
            }
            long primotempo = time();
            for (id = 0; errori < 5 && id < numeroparole; id++) {
                int leng = parole[id].length();
                String[] indovinate = new String[leng - 2];
                int containdovinate = 0;
                String[] inserite = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "y", "x", "z"};
                while (!parole[id].equalsIgnoreCase(parolautente) && errori < 5) {
                    String mancanti = "";
                    if (errori == 0) {
                        disegno = " -----\n|     O\n|\n|\n|\n-";
                    } else if (errori == 1) {
                        disegno = " -----\n|     O\n|     /\n|\n|\n-";
                    } else if (errori == 2) {
                        disegno = " -----\n|     O\n|     /\\\n|\n|\n-";
                    } else if (errori == 3) {
                        disegno = " -----\n|     O\n|     /\\\n|     -\n|\n-";
                    } else if (errori == 4) {
                        disegno = " -----\n|     O\n|     /\\\n|     -\n|     /\n-";
                    } else {
                        disegno = " -----\n|     O\n|     /\\\n|     -\n|     /\\\n-";
                    }
                    String cripta = impiccato(parole[id], indovinate, 1);
                    for (int idd = 0; idd < inserite.length; idd++) {
                        mancanti = mancanti + inserite[idd] + " ";
                    }
                    lettera = JOptionPane.showInputDialog(disegno + "\nATTENTO: hai gia fatto " + errori + " errori\nParola: " + cripta + "\nLettere che puoi inserire: " + mancanti + "\nInserisci la lettera:");
                    for (int idd = 0; idd < inserite.length; idd++) {
                        if (lettera.equalsIgnoreCase(inserite[idd])) {
                            inserite[idd] = "";
                        }
                    }
                    if (confronta(parole[id], lettera) == false) {
                        errori++;
                    } else {
                        indovinate[containdovinate] = lettera;
                        containdovinate++;
                    }
                    cripta = impiccato(parole[id], indovinate,0);
                    if (cripta.equals(parole[id])) {
                        parolautente = parole[id];
                    }

                }
                if (parolautente.equalsIgnoreCase(parole[id])) {
                    JOptionPane.showMessageDialog(null, "Complimenti, hai vinto!!!");
                    paroleindovinate++;
                } else {
                    JOptionPane.showMessageDialog(null, "Mi dispiace, sei morto impiccato");
                }
            }
            long secondotempo = time();
            long tempo = secondotempo - primotempo;
            JOptionPane.showMessageDialog(null, "Hai indovinato " + paroleindovinate + " parole su " + numeroparole + "\n Percentuale: " + paroleindovinate * 100 / numeroparole + "%\nTempo impiegato: " + FormattaTempo(tempo));
            continua = JOptionPane.showConfirmDialog(null, "Continuare a giocare?");
        }
    }
}
